import pygame
import random
from pygame.locals import *

# Modulos locales
from agente import *
from xmlParser import *
from util import *


CONFIGURATION_FILE = 'configuracion.xml'
SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480
MIN_DIST = 20
grupo_agentes = pygame.sprite.Group()
agentes = []
NUMERO = 0
GRAFICO = True
FLAG_DEBUGG = False
#para calculo de potenciales
#amplitudes atractivas y repulsivas
C_a = 3
C_r = 2
#rangos atractivos y repulsivos
l_a = 1.5
l_r = 1.5
alpha = 0
beta = 0

def main():
    global C_a, l_a, C_r, l_r, GRAFICO
    config = xml_parser(CONFIGURATION_FILE)
    SCREEN_WIDTH, SCREEN_HEIGHT = config.get_screen_size()
    screen_name = config.get_screen_name()
    fps = config.get_fps()
    agent_image_file = config.get_imagen()
    pygame.init()
    if GRAFICO:
        screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
        pygame.display.set_caption(screen_name)
    
    #dt=1
    #archivo de log: Contiene los datos en cada paso de tiempo
    my_log_file = log()
    # INTRODUCCION DE DATOS POR PARTE DEL USUARIO
    config = xml_parser(CONFIGURATION_FILE)
    cant_agentes = config.get_cantidad_agentes()
    C_a = config.get_amplitud_atractiva()
    C_r = config.get_amplitud_repulsiva()
    l_a = config.get_rango_de_atraccion()
    l_r = config.get_rango_de_repulsion()
    alpha = config.get_alpha()
    beta = config.get_beta()    
    
    if GRAFICO:
        #en un futuro
        #background = pygame.image.load('fondo').convert()
        background = pygame.Surface(screen.get_size())
        background = background.convert()
        background.fill((0,0,200))
        #background_rect = background.get_rect()
    
    for i in range(cant_agentes):
        agente_aux = Agente(agent_image_file)
        
        if config.get_is_random():
            pos_x = random.randint(0,SCREEN_WIDTH)
            pos_y = random.randint(0,SCREEN_HEIGHT)
            agente_aux.situar_en( pos_x, pos_y)    
        else:
            pos_x, pos_y = config.get_position(i)
            agente_aux.situar_en( pos_x, pos_y)
        #agrupo todos los agentes
        agentes.append(agente_aux)
    grupo_agentes = pygame.sprite.Group(agentes)
    
    clock = pygame.time.Clock()
    time = 0
    iter = 0
    dt = 1e-3
    segundo = 1/dt
    while iter < 100*segundo:
        if iter % segundo == 0:
            print iter
        iter +=1
        clock.tick(fps)
        #para manejar eventos ocurridos
        
        input(pygame.event.get())
        
        if GRAFICO:
            #dibujo el fondo
            screen.blit(background, (0,0))
            #actualizo posicion de los agentes
            #grupo_agentes.update()
        for agente in agentes:
            #agente.update()
            agente.update_position(dt)
        for agente in agentes:
            agente.update_values()
            agente.update_velocity(dt)
        for agente in agentes:
            if agentes[0].pos[0] == agentes[1].pos[0]:
                FLAG_DEBUGG = True
            my_log_file.update(str(time)+','+agente.get_data() )
            agente.update_values()
            
        time += 1
        if GRAFICO:
            #dibujo a los agentes en mi screen
            grupo_agentes.draw(screen)
            pygame.display.flip()
            #muestro screen actualizado
